/**
 * 版权所有(C)，上海海鼎信息工程股份有限公司，2007，所有权利保留。
 * 
 * 项目名：	rumba
 * 文件名：	ConstraintFactory.java
 * 模块说明：	
 * 修改历史：
 * Nov 2, 2007 - lxm - 创建。
 */
package com.hd123.rumba.mscb.constraint;

import java.util.HashMap;
import java.util.Map;

import com.hd123.rumba.exception.BusinessException;

/**
 * 约束条件解释器工厂 | 实现类
 * 
 * @author lxm
 * 
 */
public class ConstraintFactory {

  private static Map<String, IConstraint> buffer = new HashMap<String, IConstraint>();

  /**
   * 根据类名构造约束条件对象。
   * 
   * @param className
   *          指定的IConstraint实现类的类名。
   * @return 返回创建的约束条件对象实例。s
   * @throws BusinessException
   */
  public static IConstraint buildConstraint(String className) throws BusinessException {
    Object cst;
    try {
      cst = buffer.get(className);
      if (cst == null) {
        cst = Class.forName(className).newInstance();
        if (!(cst instanceof IConstraint))
          throw new BusinessException("指定的类" + className + "必须实现接口" + IConstraint.class.getName()
              + "。");
        buffer.put(className, (IConstraint) cst);
      }
      ((IConstraint) cst).clear();
      return (IConstraint) cst;
    } catch (InstantiationException e) {
      throw new BusinessException(e);
    } catch (IllegalAccessException e) {
      throw new BusinessException(e);
    } catch (ClassNotFoundException e) {
      throw new BusinessException(e);
    }
  }
}
